/*
 * Copyright 2006-2008 Sxip Identity Corporation
 */

package org.openid4java.samples;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.log4j.NDC;

public abstract class HttpServletSupport extends HttpServlet {
  protected static final long serialVersionUID = 1L;
  protected static Exception lastException;

  protected static int count_;
  protected Logger logger_;

  public HttpServletSupport() {
    logger_ = Logger.getLogger(getClass());
  }

  protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
      IOException {
    count_++;
    String ndcName = getClass().getName();
    ndcName = ndcName.substring(ndcName.lastIndexOf('.') + 1);
    NDC.push(ndcName);
    NDC.push("call-" + count_);
    logger_.info("begin onService");
    try {
      onService(req, resp);
    } catch (Exception exc) {
      lastException = exc;
      resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    } finally {
      logger_.info("end onService");
      NDC.pop();
      NDC.pop();
    }
  }

  protected abstract void onService(HttpServletRequest req, HttpServletResponse resp)
      throws Exception;
}
